Changes in the European Energy Market due the Russia-Ukraine War

If you want a subtitle, put it here

Author

Gavin Ulrich

Published

December 8, 2024

NOTE: You should delete all of the text below this line, including this line before submitting - all of the text below is just here as a helpful guide

Intro -

Research Question - How has the European energy market been impacted by the ending of Russian energy export due to the Ukraine war? How has the market changed through both domestic production and international exports?

Data Sources - A large portion of our data comes directly from the European Union through the information gained through Eurostat. Eurostat is the statistics office of the EU and provides data on Europe through an official EU website. This is data produced by the EU itself, and although its process internally it is a primary source of the data. The EU is a reputable source, as it is a major international agreement that is considered very reputable. I believe that the data is reputable because the EU uses the data it collects to make informed decisions. The data needs to be accurate in order to properly make decisions, so therefore it makes more sense for this data to be objective.

Some of our data also comes from independent sources, generally independent climate or energy research groups. These groups also tend to be reputable, however there can be issues with the data due to political reasons. Certain research groups can be funded in order to provide data in order to support political issues, and especially with energy data on energy production and climate impact which both have a strong influence on political discussions. However despite these issues I believe our sources are reliable and aren’t affected due to how the data they record is more objective and reports usage and exports rather than scientific finds. These sources are more focused around market and export data, which in a similar case to the EUs datasets need to be accurate in order to have a good understanding of how the market is changing.

data dictionary

Russia’s Role in Gas Exports to Europe -

data_path <- here("data_raw", "nrg_pc_202_page_linear.csv")
energy_prices <- read_csv(data_path) %>%
      janitor::clean_names()

euro_area <- energy_prices %>%
    filter(geo == "EA")

euro_area$color <- ifelse(euro_area$time_period == "2022-S1", "highlight", "normal")




euro_area
#> # A tibble: 10 × 13
#>    dataflow        last_update freq  product nrg_cons unit  tax   currency geo  
#>    <chr>           <chr>       <chr>   <dbl> <chr>    <chr> <chr> <chr>    <chr>
#>  1 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#>  2 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#>  3 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#>  4 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#>  5 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#>  6 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#>  7 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#>  8 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#>  9 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#> 10 ESTAT:NRG_PC_2… 27/10/24 2… S        4100 GJ20-199 KWH   X_TAX EUR      EA   
#> # ℹ 4 more variables: time_period <chr>, obs_value <dbl>, obs_flag <chr>,
#> #   color <chr>
ggplot(euro_area) +
    geom_bar(aes(x = time_period, y = obs_value), 
             stat = "identity", width = 0.8, show.legend = FALSE) +
    labs(
        title = "Gas Cost Per Household in Euro Area",
        subtitle = "Exluding Taxes and Levies",
        x = "Time Period",
        y = "Gas Cost kWh per Euro",
        caption = "Source of data:Eurostat") +  
    theme_void()+
    theme(
        plot.title = element_text(size = 20),
        plot.subtitle = element_text(size = 12), 
        axis.text.x = element_text(angle = 45, hjust = 1, size = 8, 
        vjust = 1), 
        axis.title.y = element_text(angle = 90, hjust = 0.5, 
        size = 12, vjust = 1), 
        axis.title.x = element_text(size = 12), 
        axis.text.y = element_text(size = 8),
        plot.margin = margin(1, 1, 3, 1) 
    ) + 
    geom_vline(xintercept = 5.8, linetype = "solid", color = "red", 
    size = 1) + 
    annotate("text", x = 4.8, y =  .08,
             label = "Start of War", angle = 0, vjust = -0.5, size = 5)

Russia played a major role in the European energy market as a major exporter of natural gas. Energy sources from Russia was found throughout Europe, helping

Immediate Impact

```{r

route_data <- read_xlsx(here::here(‘data_raw’, ‘LNG plot data 2024-12-04.xlsx’))

energy_import <- route_data %>% select(-1) %>% janitor::clean_names()

energy_import

long_import <- energy_import %>% pivot_longer( cols = -dates,
names_to = “country”, values_to = “value” )

long_import <- long_import %>% group_by(dates) %>% mutate(country = factor(country, levels = country[order(value, decreasing = TRUE)])) %>% ungroup()

long_import <- long_import %>% group_by(dates) %>% # Group by ‘date’ to calculate and reorder for each date mutate(country = factor(country, levels = country[order(value, decreasing = TRUE)])) %>% ungroup()

long_import

ggplot(long_import, aes(x = dates, y = value, fill = country)) + geom_bar(stat = “identity”) + theme_minimal() + labs( title = “Energy Imports by Country”, x = “Date”, y = “Energy Value”, fill = “Country” )+
scale_fill_brewer(palette = “Set3”, labels = c(“africa” = “Africa”, “middle_east” = “Middle_East”, “america” = “America”, “russia” = “Russia”)) theme( axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(size = 16, face = “bold”),
plot.subtitle = element_text(size = 12), axis.title.x = element_text(size = 14), axis.title.y = element_text(size = 14), axis.text.y = element_text(size = 12), plot.margin = margin(1, 1, 3, 1), legend.title = element_text(size = 10, face = “bold”),
legend.text = element_text(size = 8), legend.key.size = unit(0.5, “cm”), # Adjust the size of legend keys legend.position = “right”) + scale_fill_viridis(discrete = TRUE, option = “D”) + guides( fill = guide_legend(title = “Country”) # Adjust the legend title )





::: {.cell}

```{.r .cell-code}
route_data <- read_csv(here::here('data_raw', 'monthly_full_release_long_format.csv'))

energy_source <- route_data %>%
    janitor::clean_names()

eu_energy_source <- energy_source %>%
    filter(category == "Electricity generation") %>%
    filter(area == "EU") %>%
    filter(subcategory != "Total") %>%
    filter(unit == "TWh") %>%
    filter(subcategory == "Fuel") %>%
    filter(variable != c("Demand","Clean"))

    
eu_total <- energy_source %>%
    filter(category == "Electricity generation") %>%
    filter(area == "EU") %>%
    filter(subcategory == "Total")

eu_total
#> # A tibble: 118 × 18
#>    area  country_code date       area_type continent ember_region    eu  oecd
#>    <chr> <chr>        <date>     <chr>     <chr>     <chr>        <dbl> <dbl>
#>  1 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  2 EU    <NA>         2015-02-01 Region    <NA>      <NA>            NA    NA
#>  3 EU    <NA>         2015-03-01 Region    <NA>      <NA>            NA    NA
#>  4 EU    <NA>         2015-04-01 Region    <NA>      <NA>            NA    NA
#>  5 EU    <NA>         2015-05-01 Region    <NA>      <NA>            NA    NA
#>  6 EU    <NA>         2015-06-01 Region    <NA>      <NA>            NA    NA
#>  7 EU    <NA>         2015-07-01 Region    <NA>      <NA>            NA    NA
#>  8 EU    <NA>         2015-08-01 Region    <NA>      <NA>            NA    NA
#>  9 EU    <NA>         2015-09-01 Region    <NA>      <NA>            NA    NA
#> 10 EU    <NA>         2015-10-01 Region    <NA>      <NA>            NA    NA
#> # ℹ 108 more rows
#> # ℹ 10 more variables: g20 <dbl>, g7 <dbl>, asean <dbl>, category <chr>,
#> #   subcategory <chr>, variable <chr>, unit <chr>, value <dbl>,
#> #   yo_y_absolute_change <dbl>, yo_y_percent_change <dbl>
total_prodution <- eu_total %>%
    ggplot(aes(x = date, y = value, color = variable))+
    geom_line() +
    theme_minimal() + 
    labs(title = "Total EU Domestic Electriciy Generation By Type", 
         x = "Date", 
         y = "Terrawatt Hours (TWh)",
         caption = "Source: Ember") +
    scale_color_viridis(discrete = TRUE, option = "plasma") +
    theme(legend.position = "none")

total_prodution

eu_energy_source
#> # A tibble: 1,062 × 18
#>    area  country_code date       area_type continent ember_region    eu  oecd
#>    <chr> <chr>        <date>     <chr>     <chr>     <chr>        <dbl> <dbl>
#>  1 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  2 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  3 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  4 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  5 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  6 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  7 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  8 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#>  9 EU    <NA>         2015-01-01 Region    <NA>      <NA>            NA    NA
#> 10 EU    <NA>         2015-02-01 Region    <NA>      <NA>            NA    NA
#> # ℹ 1,052 more rows
#> # ℹ 10 more variables: g20 <dbl>, g7 <dbl>, asean <dbl>, category <chr>,
#> #   subcategory <chr>, variable <chr>, unit <chr>, value <dbl>,
#> #   yo_y_absolute_change <dbl>, yo_y_percent_change <dbl>
ani_plot <- eu_energy_source %>%
    ggplot(aes(x = date, y = value, color = variable)) + 
    geom_line() +
    geom_point() +
    geom_text_repel( aes(label = variable),
    hjust = 0, nudge_x = 1, direction = "y",
    size = 3, max.overlaps = 20,segment.color = NA) +
    theme_minimal() + 
    labs(title = "EU Domestic Electricity Generation By Type",
         subtitle = "Yellow represents Wind",
         x = "Date", 
         y = "Terawatt Hours (TWh)",
         caption = "Source: Ember") +
    scale_color_viridis(discrete = TRUE, option = "plasma") +
    theme(legend.position = "none")

ani_plot

animated_plot <- ani_plot +
    transition_reveal(date) +  # Animate by the 'date' variable
    ease_aes('linear')
    
animate(animated_plot,
        end_pause = 15,
        duration = 10,
        renderer = magick_renderer())

anim_save(here::here(
  'figs', 'animated_plot.gif'))

ggsave("total_prodution.png", path = "figs")

:::

Conclusion

Russia played a major role in the European energy market supplying a large amount of energy throughout the continent. However, due to their invasion of Ukraine and the subsequent sanctions placed on their export of natural gas to the EU, cheap Russian energy which Europe relayed was effectively destroyed. The immediate impact of this loss of energy was evident, household prices soared with many across Europe unable to afford basic utilities to heat and power their homes. The EU was put into a difficult position, as not only was there an immediate energy crisis to deal with, but due Russia’s imperial actions a potential long term lack of cheap energy. However this also presented an opportunity to invest into more sustainably and reliable sources of energy, with potential to create strong and more importantly eco-friendly energy infrastructure. The EUs responded to this challenge by increasing short term international energy imports, with a huge increase from America. At the same time the EU continued the trend of increasing green energy production while continuing to decrease its reliance on fossil fuels. Ultimately the full impact and effectiveness of these dimensions will continue to play out over the rest of the decade and into the future. The decision to not rely heavily on domestic fossil fuels did hurt the EU economically in the short term, however in the long term their decision to back renewables will most likely greatly benefit all member nations.

Data Dictionary

Chart 1:
Chart 2: European Gas Transit from Russian Gas Pipelines
Variable Data Type Description
Year integer Year of Gas transit
Week integer Week of the Year
Route character Gas transit pipeline route
Gas_transit double Amount of gas transit(million cubic meters)
Week_Continuous double Week number starting from the first week of 2021

Settings

Make sure you update the settings in the YAML for your report (the part at the very top between the “—” symbols). Update the title, subtitle, name, date, and even the theme if you wish.

Also note that I’ve added code_folding: hide to the settings - this adds a drop-down menu at the very top so that your code chunks can be hidden or shown on command. It makes for a nice, more polished report.